— http://pr0java.blogspot.ru/2015/12/java.html — https://m.habrahabr.ru/company/mailru/blog/314804/ — https://stackoverflow.com/questions/9249357/difference-between-namespace-in-c-sharp-and-package-in-java — https://tproger.ru/translations/untangling-c-declarations/ Про C#: 1. Что будет, если использовать override для метода, не объявленного как virtual? Ответ: Ошибка. 2. Если метод объявлен как virtual у класса A, от которого наследуется класс B, а затем от B наследуется C, причем у B метод переопределен, но он не объявлен virtual, то будет ли он все равно являться virtual, как в плюсах? Ответ: Нет. В класе B будет перекрытие и варнинг, что, возможно, делаешь хрень. Так что в С будет обычная функция, не virutal. По умолчанию в # виртуальность не ставится, надо обязательно писать override. 3. Что будет, если использовать virtual, а затем переопределять метод без override? Просто с одного конца писать virtual, а с другого override — это какое-то излишество. Ответ: Предупреждение и перекрытие. 4. Единственное применение new — заглушать предупреждение? Ответ: Да. 5. override в самом базовом классе — это просто дичь? Ответ: Да. Итого: 1) если override, обязательно выше должно быть virtual 2) override можно и опустить, но будет варнинг (работает как new, а не override, т.е. идёт перекрытие) 3) чтобы заглушить предупреждение, нужно использовать new, в том числе если не virtual Вообще, в родительском классе прописывается virtual, чтобы обозначить виртуальную функцию; в дитятке пишется override, чтобы обозначить, что функция продолжает виртуализироваться, new, что это перекрытие и виртуализации больше нет (но вроде как считается, что если ты это делаешь, то это не оч). По умолчанию считается, что ты не хочешь виртуализировать, но об этом выскакивает предупреждение.